package br.com.werp.regras.contabilidade.integracao;

import br.com.werp.regras.geral.ErroPadrao;
import br.com.werp.regras.geral.integracao.MasterDAO;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.util.Util;
import br.com.werp.regras.geral.vos.contabilidade.ConfiguracaoComposicaoVO;
import br.com.werp.regras.geral.vos.tabelas.Composicao_configuracao;
import br.com.werp.regras.geral.vos.tabelas.Configuracao_contabil_empresa;

import java.sql.Connection;
import java.sql.SQLException;

import java.util.LinkedList;
import java.util.List;
import java.util.ResourceBundle;


/**
 * @author Sobreira refact 20/11/2006
 * @author Carlos Eduardo
 * Created on 22/02/2005
 */
public class ConfiguracaoDAO extends MasterDAO {
    private static ConfiguracaoDAO configuracaoDAO;

    private ConfiguracaoDAO(String banco) throws Exception {
        super(banco);
    }

    public static ConfiguracaoDAO getConfiguracaoDAO()
        throws Exception {
        if (configuracaoDAO == null) {
            ResourceBundle bundle = ResourceBundle.getBundle(Constantes.CONFIG);
            configuracaoDAO = new ConfiguracaoDAO(bundle.getString(
                        Constantes.BANCO));
        }

        return configuracaoDAO;
    }

    public void inserirConfiguracao_contabil_empresa(Object key,
        Configuracao_contabil_empresa configuracao_contabil_empresa)
        throws Exception {
        List excluidas = new LinkedList();

        if (configuracao_contabil_empresa.getCcbe_credito() == 0) {
            excluidas.add("ccbe_credito");
        }

        if (configuracao_contabil_empresa.getCcbe_debito() == 0) {
            excluidas.add("ccbe_debito");
        }

        if (configuracao_contabil_empresa.getCcbe_historico() == 0) {
            excluidas.add("ccbe_historico");
        }

        if (configuracao_contabil_empresa.getCcbe_setor() == 0) {
            excluidas.add("ccbe_setor");
        }

        inserirVO(validarTransacao(key), configuracao_contabil_empresa,
            Util.converterListDeStringParaArrayDeString(excluidas));
    }

    public static void main(String[] args) {
        Configuracao_contabil_empresa configuracao_contabil_empresa =
            new Configuracao_contabil_empresa();
        List excluidas = new LinkedList();

        if (configuracao_contabil_empresa.getCcbe_credito() == 0) {
            excluidas.add("ccbe_credito");
        }

        if (configuracao_contabil_empresa.getCcbe_debito() == 0) {
            excluidas.add("ccbe_debito");
        }

        if (configuracao_contabil_empresa.getCcbe_historico() == 0) {
            excluidas.add("ccbe_historico");
        }

        if (configuracao_contabil_empresa.getCcbe_setor() == 0) {
            excluidas.add("ccbe_setor");
        }

        Object[] object = (Object[]) excluidas.toArray();
        System.out.println(object.getClass().getName());
    }

    public List pesquisarConfiguracaoContabil(
        Configuracao_contabil_empresa configuracao_contabil_empresa)
        throws Exception {
        Connection connection = getConexao();

        try {
            return pesquisarVO(connection, configuracao_contabil_empresa);
        } finally {
            liberaConeccao(connection);
        }
    }

    public void atualizarConfiguracao_contabil_empresa(Object key,
        Configuracao_contabil_empresa configuracao_contabil_empresa)
        throws ErroPadrao, SQLException, Exception {
        String[] pk = { "ccbe_id" };
        List excluidas = new LinkedList();

        if (configuracao_contabil_empresa.getCcbe_credito() == 0) {
            excluidas.add("ccbe_credito");
        }

        if (configuracao_contabil_empresa.getCcbe_debito() == 0) {
            excluidas.add("ccbe_debito");
        }

        if (configuracao_contabil_empresa.getCcbe_historico() == 0) {
            excluidas.add("ccbe_historico");
        }

        if (configuracao_contabil_empresa.getCcbe_setor() == 0) {
            excluidas.add("ccbe_setor");
        }

        atualizarVO(validarTransacao(key), configuracao_contabil_empresa, pk,
            Util.converterListDeStringParaArrayDeString(excluidas));
    }

    public void inserirComposicao_configuracao(Object key,
        Composicao_configuracao composicao_configuracao)
        throws Exception {
        inserirVO(validarTransacao(key), composicao_configuracao,
            new String[] { "cmcn_id" });
    }

    public List pesquisarConfiguracaoComposicaoVO(
        ConfiguracaoComposicaoVO configuracaoComposicaoVO)
        throws Exception {
        Connection connection = getConexao();

        try {
            String tabela = "composicao_configuracao";

            return pesquisarVO(connection, configuracaoComposicaoVO, "",
                tabela, ConfiguracaoComposicaoVO.EXCLUIDAS);
        } finally {
            liberaConeccao(connection);
        }
    }

    public void removerComposicao_configuracao(Object key,
        Composicao_configuracao composicao_configuracao)
        throws ErroPadrao, SQLException, Exception {
        excluirVO(validarTransacao(key), composicao_configuracao);
    }
}
